package com.literaryfamily.literaryfamily.service.notifications;

import com.literaryfamily.literaryfamily.entity.UserChats;
import org.springframework.web.multipart.MultipartFile;

import java.util.Date;
import java.util.List;

/**
 * 用户聊天的接口
 * 所有涉及读写的方法都需要抛出 WriteError 数据库读写错误异常(这个是运行时异常,只需要抛出不需要处理)
 * 此接口所有方法均不检查用户身份,应该验证身份后在进行检查
 *
 * @author 滑稽/因果报应
 */
public interface UserChatService {
	/**
	 * 发送聊天信息
	 *
	 * @param userChat 仅有必要信息的聊天记录
	 * @return 保存后的完整的信息
	 */
	UserChats sendUserChat(UserChats userChat);

	/**
	 * 设置已读
	 *
	 * @param userChatId 被设置已读的消息
	 * @return 操作结果
	 */
	UserChats readUserChat(Long userChatId);

	/**
	 * 批量设置已读
	 *
	 * @return 操作数量
	 */
	int readUserChat(List<Long> userChatId);

	/**
	 * 上传文件作为聊天记录
	 * 聊天内容(chatContent字段)处存储文件url,url之间使用;隔开
	 * @param userChat  其他必要聊天信息
	 * @param filesList 上传的文件
	 * @return 完整的聊天记录信息(内容依赖存放的文件url, hasFile = true)
	 */
	UserChats sendFile(UserChats userChat, List<MultipartFile> filesList);

	/**
	 * 获取某一段时间内的所有聊天记录
	 * @param userId 获取的用户
	 * @param startDate 开始时间
	 * @param endDate 结束时间
	 * @return 所有结果, 为空时返回空集合
	 */
	List<UserChats> readUserChats(Long userId, Date startDate, Date endDate);

}